import {
  getCommentNew,
  sendOrDelComment,
  getCommentHot,
  sendCommentLike,
  getCommentPlaylist
} from "@/api/review/index"

import {Notify} from "vant"
import {getCommentAlbum, getCommentDj, getCommentEvent, getCommentMusic} from "../../api/review/index.js";
import {getMsgPrivate} from "../../api/message/index.js";
import {getCommentMv, getCommentVideo} from "../../api/mv/index.js";


const reviewState = {
  page: { // 获取歌单评论 分页数据
    num: 0,  // 用于偏移量
    before: null, //  当数据超过5000需要用到也就是上一页最后一条数据的time
    limit: 20 // 每页多少数据
  }, // 分页数据
  commentData: {}, // 歌曲评论数据
  hotCommentData: [], // 热门评论
  allTypeReview: [], // 可以获取所有类型的评论歌曲、歌单
  currentInfo: { // 用于判断当前数据的详情歌曲还是歌单或者专辑
    type: 0, // 记录当前类别，0：歌曲， 1：歌单 2：专辑是哪个, 5:电台 , 6:电台节目 3：每日歌曲, 4: 播放歌手的50首歌
    id: null, // 当前请求数据的id
    topTitle: '喜欢这个歌单的人', // 右侧title
    centerTile: '热门歌单',
    playMoreLike: '', // 相似歌曲
    studioId: null, // 专辑工作室的id，用来获取专辑详情这个工作室其他专辑
    threadId: '' // 动态评论Id
  },
  msgPrivateData: {} // 存储私信数据
}

const reviewActions = {
  // 老接口获取评论数据包括热门和最新
  getCommentPlaylist() {
    // { id: this.listPlaylistDetails.id, limit, offset: num * limit, before: 当数据超过5000需要用到也就是上一页最后一条数据的time }
    getCommentPlaylist({
      id: this.currentInfo.id,
      limit: this.page.limit,
      offset: this.page.num * this.page.limit,
      before: this.page.before
    }).then(res => {
      if (Number(res.code) === 200) {
        this.commentData = res
      }
      // console.log(res)
    })
  },
  // 获取专辑评论
  getCommentAlbum() {
    getCommentAlbum({
      id: this.currentInfo.id,
      limit: this.page.limit,
      offset: this.page.num * this.page.limit,
      before: this.page.before
    }).then(res => {
      if (Number(res.code) === 200) {
        this.commentData = res
      }
    }).catch(err => {
      console.log(err)
    })
  },
  // 获取歌曲评论
  getCommentMusic() {
    getCommentMusic({
      id: this.currentInfo.id,
      limit: this.page.limit,
      offset: this.page.num * this.page.limit,
      before: this.page.before
    }).then(res => {
      if (Number(res.code) === 200) {
        this.commentData = res
      }
    })
  },
  /**
   *@params：
   *@desc：下面这两个都是新接口，新接口没有回复评论
   *@author：羽
   *@date 2022/08/13 15:40:10
   */
  // 获取评论根据type来判断是哪种歌曲 { id: '', pageSize: 20每页数据, type: 2 歌单, pageNo: 1第几页, sortType: 3按时间排序, cursor: 上一页最后一条数据的time 1660365874079 }
  getCommentNew(params = {type: 2, pageNo: 1}) {
    getCommentNew({...params, id: this.listPlaylistDetails.id, sortType: 3, pageSize: 20}).then(res => {
      const {code, data} = res
      if (Number(code) === 200) {
        this.allTypeReview = data
      }
      // console.log(res)
    })
  },
  // 获取热门评论 {id: '', limit: 20,type: 2, before: 0, offset: 0 }
  getCommentHot(limit = 20, num = 0, type = 2) {
    getCommentHot({id: this.listPlaylistDetails.id, type, limit, offset: limit * num}).then(res => {
      const {code, hotComments} = res
      if (Number(code) === 200) {
        this.hotCommentData = hotComments
      }
    })
  },
  // 电台节目评论
  getCommentDj() {
    getCommentDj({
      id: this.currentInfo.id,
      limit: this.page.limit,
      offset: this.page.num * this.page.limit,
      before: this.page.before
    }).then(res => {
      if (Number(res.code) === 200) {
        this.commentData = res
      }
    })
  },
  // Mv的评论
  getCommentMv() {
    getCommentMv({
      id: this.currentInfo.id,
      limit: this.page.limit,
      offset: this.page.num * this.page.limit,
      before: this.page.before
    }).then(res => {
      if (Number(res.code) === 200) {
        this.commentData = res
      }
    })
  },
  getCommentVideo() {
    getCommentVideo({
      id: this.currentInfo.id,
      limit: this.page.limit,
      offset: this.page.num * this.page.limit,
      before: this.page.before
    }).then(res => {
      if (Number(res.code) === 200) {
        this.commentData = res
      }
    })
  },
  // 点赞 //  { id: 0 歌单id, cid: 0 评论id, t: 1点赞 0取消点赞, type: 2歌单 0 歌曲, threadId:这个是给动态点赞需要传递  threadId 可通过 /event，/user/event 接口获取 就不需要 资源id了,  }
  // flag 用来区别是动态还是其他的（例如歌曲，歌单评论）
  sendCommentLike(params) {
    const as = {
      id: this.currentInfo.type === 7 ? null : this.currentInfo.id,
      threadId: this.currentInfo.type === 7 ? this.currentInfo.threadId : null
    }
    return sendCommentLike({...params, ...as}).then(res => {
      const {code} = res
      if (Number(code) === 200) {
        const currentType = {
          // 歌曲
          0: () => {
            // 如果点赞成功了就重新获取评论数据
            this.getCommentMusic()
          },
          // 歌单
          1: () => {
            // 如果点赞成功了就重新获取评论数据
            this.getCommentPlaylist()
          },
          // 如果点赞成功了就重新获取评论数据
          2: () => {
            this.getCommentAlbum()
          },
          //  如果点赞成功了就重新获取评论数据
          6: () => {
            this.getCommentDj()
          },
          //  如果点赞成功了就重新获取动态评论数据
          7: () => {
            this.getCommentEvent()
          },
          10: () => {
            this.getCommentMv()
          },
          11: () => {
            this.getCommentVideo()
          }
        }
        currentType && currentType[this.currentInfo.type] && currentType[this.currentInfo.type]()
      }
    })
  },
  // 获取动态评论 /comment/event?threadId=A_EV_2_6559519868_32953014
  getCommentEvent() {
    getCommentEvent({threadId: this.currentInfo.threadId}).then(res => {
      const {code} = res
      if (Number(code) === 200) this.commentData = res
    })
  },
  // 回复删除发送评论
  // 可以发送删除回复评论 params = {
  // t: 1 发送 2 回复 0 删除， type: 用来判断是0：歌曲还是2：歌单还是其他的,
  // id: 对应资源id, content: 要发送的内容， 如果如果要是删除的话这个id是不需要的，
  // commentId: 回复评论的id，也是删除的id
  // }
  sendOrDelComment(params) {
    // 发送动态不需要id但是需要threadId
    const as = {
      id: this.currentInfo.type === 7 ? null : this.currentInfo.id,
      threadId: this.currentInfo.type === 7 ? this.currentInfo.threadId : null
    }
    sendOrDelComment({...params, ...as}).then(res => {
      const {code} = res
      if (Number(code) === 200) {
        let message = params.t === 0 ? '删除成功' : '发送成功'
        Notify({
          message: message,
          background: '#ffe1e1',
          color: '#ad0000'
        })
        const currentType = {
          // 歌曲
          0: () => {
            // 如果评论成功了就重新获取评论数据
            this.getCommentMusic()
          },
          // 歌单
          1: () => {
            // 如果评论成功了就重新获取评论数据
            this.getCommentPlaylist()
          },
          // 专辑  如果评论成功了就重新获取评论数据
          2: () => {
            this.getCommentAlbum()
          },
          // 电台节目 如果评论成功了就重新获取评论数据
          6: () => {
            this.getCommentDj()
          },
          // 动态评论 如果评论成功了就重新获取评论数据
          7: () => {
            this.getCommentEvent()
          },
          // 获取Mv评论
          10: () => {
            this.getCommentMv()
          },
          // 获取Mv评论
          11: () => {
            this.getCommentVideo()
          }
        }
        currentType && currentType[this.currentInfo.type] && currentType[this.currentInfo.type]()
      }
    })
  },
  getMsgPrivate(num = 0, type, limit = 30) {
    if (type === 'msg') this.msgPrivateData = {}
    return getMsgPrivate({limit, offset: num * limit}).then(res => {
      if (res.code === 200 && res.msgs.length > 0) {
        const msgs = res.msgs.map(item => {
          return {
            ...item,
            lastMsg: JSON.parse(item.lastMsg)
          }
        })
        this.msgPrivateData = {
          ...res,
          msgs: this.msgPrivateData.msgs ? [...this.msgPrivateData.msgs, ...msgs] : msgs
        }
      }
      return res.code
    })
  }
}

const reviewGetters = {}

export {
  reviewGetters,
  reviewActions,
  reviewState
}
